#ifndef samourai_hpp
#define samourai_hpp

#include "projet.hpp"

using namespace std;

////////////////SAMOURAI///////////////////////
class samourai : public ronin {
  
public :
  //  void set_honneur(
  void action(humain *h){
    if (typeid(*h)==typeid(yakuza))
   
      provoquer(*((yakuza *)h));
  }

  void donner(float argt, humain *h) {
    if (typeid(*h)==typeid(commercant)){
      commercant * c=(commercant *)h;
      ostringstream oss;
      oss<<"Tiens "<<c->get_nom()<<" voilà "<<argt<<" euros";
      parler(oss.str());
      c->humain::gagner(argt);
      set_argent(get_argent()-argt);  }
  }

  void provoquer(yakuza &y) 
  {

    if(ronin::get_honneur()*2>y.get_rep()) {
      set_argent(get_argent()+y.perdre());
      parler("Je t'ai bien eu le Yakuza !");
      ronin::set_honneur(1);
    }
    else {
      y.gagner();
      ronin::set_honneur(-1);
    }  
  }

 
  samourai(): ronin(),seigneur("") {ronin::set_honneur(1);
   
  }
  samourai(const char * n, float argt, string b, string s) : ronin(n,argt, b), seigneur(s) {ronin::set_honneur(1);
  
  }
  samourai(const samourai &s) : ronin(s){ronin::set_honneur(s.get_honneur());}

  ~samourai() {}

  
  
  samourai& operator = (const samourai &s) {
    if(this !=&s) {
      this->~samourai();
      humain *h=this;
      *h=s;
      this->set_honneur(s.get_honneur());
      seigneur=s.seigneur;
    }
    return *this;
  }

  void dire_bonjour()const
  {
    ostringstream oss;
    ronin::dire_bonjour();
    oss<<"Je suis au service de "<<seigneur;
    parler(oss.str());
  }

  void boire(string boisson)const
  {

    ostringstream oss; 
    oss<<"Mmm un bon verre de "<<boisson<<" Gloups !";
    parler(oss.str());
  }
private:
  string seigneur;

};

#endif
